home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / TERMINAL.D < prev    next >
Encoding:
Modula Definition  |  1990-12-11  |  6.0 KB  |  194 lines

  1. DEFINITION MODULE Terminal;
  2.  
  3. (*
  4.  * Dieses Modul stellt Funktionen zur Ausgabe auf den Bildschirm bzw. Eingabe
  5.  * von der Tastatur zur Verfügung.
  6.  *
  7.  * Sollen Zahlen ein- oder ausgegeben werden, sind dazu die hiesigen Proze-
  8.  * duren 'ReadString' und 'WriteString' sowie die String-Umwandlungsfunktio-
  9.  * nen des Moduls 'StrConv' zu benutzen.
  10.  *
  11.  * Zur Ein-/Ausgabe werden normalerweise die BIOS-Funktionen des Atari be-
  12.  * nutzt, die standardmäßig auf die Treibervariablen in 'TermBase' zugewiesen
  13.  * sind.
  14.  * Deshalb sind auch die VT-52 Steuerzeichen verwendbar. Z.B. wird der Bild-
  15.  * schirm mit den Aufrufen 'Write (33C) (* ESC *); Write ("S")' gelöscht
  16.  * (siehe auch Funktion 'WritePg' und Modul 'VT52').
  17.  *
  18.  * Zu Beginn wird der Cursor einmalig ausgeschaltet.
  19.  * Die Funktionen 'Read', 'ReadString', 'ReadToken' und 'ReadLine' schalten
  20.  * den Cursor bei Erwarten eines Zeichens ein und am Ende wieder aus, die
  21.  * anderen Funktionen verändern den Cursorstatus nicht.
  22.  *)
  23.  
  24. FROM SYSTEM IMPORT LONGWORD;
  25.  
  26. FROM MOSGlobals IMPORT Key;
  27.  
  28.  
  29. VAR  Done: BOOLEAN;
  30.       (*
  31.        * Ist FALSE nach Aufrufen der String-Eingabefunktionen (Read...,
  32.        * Edit...), wenn Undo gedrückt wurde.
  33.        * Hat keine Wirkung bei Einzel-Eingaben, wie Read, BusyRead, usw.
  34.        *)
  35.  
  36.  
  37. PROCEDURE NumRows (): CARDINAL;
  38.   (*
  39.    * Liefert Zeilenanzahl (normalerweise 25)
  40.    *)
  41.  
  42. PROCEDURE NumCols (): CARDINAL;
  43.   (*
  44.    * Liefert Spaltenanzahl (normalerweise entweder 80 oder 40)
  45.    *)
  46.  
  47.  
  48. (*
  49.  *       Ausgabe-Funktionen
  50.  *       ------------------
  51.  *)
  52.  
  53. PROCEDURE Write (ch: CHAR);
  54.   (* Ausgabe eines Zeichens, Controlzeichen werden ausgewertet. *)
  55.  
  56. PROCEDURE WriteString (REF str: ARRAY OF CHAR);
  57.   (* Ausgabe eines Strings, Controlzeichen werden ausgewertet. *)
  58.  
  59. PROCEDURE WriteCtrl (ch: CHAR);
  60.   (* Ausgabe eines Zeichens, Controlzeichen werden angezeigt. *)
  61.  
  62. PROCEDURE WriteCtrlString (REF str: ARRAY OF CHAR);
  63.   (* Ausgabe eines Strings, Controlzeichen werden angezeigt. *)
  64.  
  65. PROCEDURE WriteLn;
  66.   (* Ausgabe eines CR / LF. (Sprung in nächste Zeile) *)
  67.  
  68. PROCEDURE WritePg;
  69.   (* Löscht Bildschirm. *)
  70.  
  71. PROCEDURE GotoXY (col, row: CARDINAL);
  72.   (*
  73.    * Setzt Cursor auf Spalte 'col', Zeile 'row'.
  74.    * Links oben ist (0,0). Wenn 'row' oder 'col' außerhalb des Bildschirms
  75.    * liegen, ist die Positionierung undefiniert.
  76.    *)
  77.  
  78. PROCEDURE GotoRowCol (row, col: CARDINAL);
  79.   (*
  80.    * Setzt Cursor auf Spalte 'col', Zeile 'row'.
  81.    * Links oben ist (0,0). Wenn 'row' oder 'col' außerhalb des Bildschirms
  82.    * liegen, ist die Positionierung undefiniert.
  83.    *)
  84.  
  85.  
  86. (*
  87.  *       Eingabe-Funktionen
  88.  *       ------------------
  89.  *
  90.  * Es gibt grundsätzlich zwei verschiedene Eingabeverfahren:
  91.  * Gepuffert und ungepuffert.
  92.  * <Ungepuffert> bedeutet, daß bei einem Aufruf einer Read-Funktion
  93.  * immer das Programmablauf gestoppt wird, damit der Anwender ein Zeichen
  94.  * oder auch einen String eingeben kann.
  95.  * Bei <gepufferter> Eingabe wird intern immer eine ganze Eingabezeile
  96.  * gepuffert und dann werden bei Aufruf der Read-Funktionen so lange
  97.  * die Zeichen und Strings aus diesem Puffer geholt, bis der Puffer
  98.  * geleert ist. Erst dann wird der Programmlauf gestoppt, um die Eingabe
  99.  * einer neuen Zeile zu ermöglichen.
  100.  *
  101.  * Nicht alle Read-Funktionen sind von dieser Pufferung berührt:
  102.  * 'ReadLine' liest sowieso immer eine ganze Zeile, sodaß der Puffer
  103.  *   immer gleich wieder geleert wird.
  104.  *)
  105.  
  106. PROCEDURE Read (VAR ch: CHAR);
  107.   (*
  108.    * Zeichen wird erwartet und wieder ausgegeben, falls es kein
  109.    * Control-Zeichen ist.
  110.    *)
  111.  
  112. PROCEDURE GetChar (VAR k: CHAR);
  113.   (*
  114.    * Liest Taste ohne Echo (keine Ausgabe des Zeichens)
  115.    *)
  116.  
  117. PROCEDURE GetKey (VAR k: Key);
  118.   (*
  119.    * Liest Taste (kein Echo!) und liefert neben dem Zeichen-Wert auch
  120.    * den Scancode (ggf. auch den Sondertastenstatus, falls Bit 3 in der
  121.    * Systemvariablen 'conterm' (siehe Module 'KbdCtrl' & 'SysVars')
  122.    * gesetzt ist).
  123.    *)
  124.  
  125. PROCEDURE CondRead (VAR ch: CHAR; VAR success: BOOLEAN);
  126.   (*
  127.    * Falls Zeichen von Tastatur ansteht, wird es 'ch' zugewiesen und
  128.    * 'success' liefert TRUE, ansonsten ist 'ch' = 0C und 'success' ist
  129.    * FALSE. Kein Echo des eingegebenen Zeichens !
  130.    *)
  131.  
  132. PROCEDURE BusyRead (VAR ch:CHAR);
  133.   (*
  134.    * Wenn Taste gedrückt, wird Zeichen in 'ch' geliefert, sonst wird 0C
  135.    * in 'ch' geliefert.
  136.    * Kein Echo des eingegebenen Zeichens !
  137.    *)
  138.  
  139. PROCEDURE KeyPressed (): BOOLEAN;
  140.   (* Liefert TRUE, wenn Taste gedrückt wurde. *)
  141.  
  142. PROCEDURE FlushKbd;
  143.   (* Löscht den Tastaturpuffer. *)
  144.  
  145.  
  146. PROCEDURE UndoRead;
  147.   (*
  148.    * Auch "ReadAgain" in anderen Dialekten:
  149.    * Das zuletzt gelesene Zeichen wird bei der nächsten Abfrage
  150.    * nochmal geliefert.
  151.    *)
  152.  
  153.  
  154. PROCEDURE ReadLine (VAR str: ARRAY OF CHAR);
  155.   (*
  156.    * Ein String kann frei eingegeben werden. Ende durch Return bzw. Enter.
  157.    * Abbruch mit Undo-Taste - dann wird ein Leerstring in 'str' geliefert
  158.    * und 'Done' ist FALSE.
  159.    * Es können nur soviele Zeichen eingegeben werden, wie 'str' fassen kann.
  160.    *)
  161.  
  162. PROCEDURE ReadCtrlLine (VAR str: ARRAY OF CHAR);
  163.   (*
  164.    * Wie ReadLine, es können aber auch die Control-Zeichen eingegeben werden.
  165.    *)
  166.  
  167. PROCEDURE EditLine (VAR str: ARRAY OF CHAR);
  168.   (*
  169.    * Wie ReadLine, jedoch muß 'str' schon beim Aufruf einen String
  170.    * enthalten, der dann angezeigt und editiert werden kann.
  171.    *)
  172.  
  173. PROCEDURE EditCtrlLine (VAR str: ARRAY OF CHAR);
  174.   (*
  175.    * Wie EditLine, es können aber auch die Control-Zeichen editiert werden.
  176.    *)
  177.  
  178. PROCEDURE ReadToken (VAR str: ARRAY OF CHAR);
  179.   (*
  180.    * Wie ReadLine, jedoch kann nur ein Wort ("Token") eingeben werden:
  181.    * Führende Leerzeichen (und Control-Zeichen) werden ignoriert,
  182.    * nach Eingabe eines gültigen Zeichens wird beim nächsten Leer- oder
  183.    * Control-Zeichen die Eingabe beendet.
  184.    * Das Terminierungszeichen kann durch Aufrufe von
  185.    *  'UndoRead' und 'Read' ermittelt werden.
  186.    *)
  187.  
  188. PROCEDURE ReadString (VAR str: ARRAY OF CHAR);
  189.   (*
  190.    * Identisch mit 'ReadLine'.
  191.    *)
  192.  
  193. END Terminal.
  194.